我在下面使用此代码,它在Android
2.3.3中完美运行。但是,在4.0+中,它无法以某种方式连接到数据库。我看到了一些有关您需要上急课的帖子。我也尝试过,但似乎无法正常工作。我可能用错了,但我很难理解。
public class connector extends Activity {
/** Called when the activity is first created. */
TextView txt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getServerData(null);
}
//i use my real ip here
public String getServerData(String returnString) {
System.out.println("going to connector class");
InputStream is = null;
final String KEY_121 = "http://10.0.0.128/connector.php";
String result = "";
//the year data to send
// ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
// nameValuePairs.add(new BasicNameValuePair("year","1970"));
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(KEY_121);
// httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
//parse json data
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","ID: "+json_data.getInt("ID")+
", \nActara: "+json_data.getString("Actara")
);
//Get an output to the screen
returnString += "\n\t" + jArray.getJSONObject(i);
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return returnString;
}
}
Logcat错误(4.0及更高版本):
11-12 12:02:35.658: E/log_tag(14083): Error in http connection android.os.NetworkOnMainThreadException
11-12 12:02:35.658: E/log_tag(14083): Error converting result java.lang.NullPointerException
11-12 12:02:35.663: E/log_tag(14083): Error parsing data org.json.JSONException: End of input at character 0 of
只有第一个错误行很重要,因为它无法连接到数据库,它给出了nullPointer(第二个和第三个错误)。
这是我在Asynch中尝试过的:
public class connector extends Activity {
/** Called when the activity is first created. */
TextView txt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new BackgroundAsyncTask().execute();
}
public class BackgroundAsyncTask extends
AsyncTask<Void, Integer, Void> {
InputStream is = null;
final String KEY_121 = "http://10.0.0.128/connector.php";
String result = "";
String returnString = "";
protected void onPostExecute(Void result) {
}
@Override
protected void onPreExecute() {
System.out.println("onPreExecute");
}
protected Void doInBackground(String... params) {
try{
System.out.println("background in progress");
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(KEY_121);
// httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
//parse json data
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","ID: "+json_data.getInt("ID")+
", \nActara: "+json_data.getString("Actara")
);
//Get an output to the screen
returnString += "\n\t" + jArray.getJSONObject(i);
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return null;
}
protected void onProgressUpdate(Integer... values) {
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
}
}
有人可以帮助我吗?我不确定真正的原因是为什么它在4.0+上不起作用。
如果您需要更多信息,请说出来,我将其发布。
代码可能有点混乱,我还没有真正“清理”它。
好的,对了…经过几个小时的搜索,提出了一个问题,然后10分钟后,您找到了解决方案…
选项1:
我添加了以下行:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
但是我建议不要使用选项1,这实际上是一个不好的解决方案。使用选项2!
// ================================================
===========================
选项2:
使用本教程制作了正确的ASyncTask:http://www.elvenware.com/charlie/development/android/SimpleHttpGetThread.html
// ================================================
===========================将
ASyncTask用作最终版本(选项2)。
这个问题非常类似于如何使用使用PHPJavaHttpClient库上传文件,但是即使是也不能正确上传文件。这里是客户端的MWE: HELLO WORLD'。 下面是的样子: 输出如下所示,这似乎意味着文件内容被发送到和,而不是 我的猜测是,我在客户端代码中做了一些愚蠢的事情,但我不确定这是什么。
问题内容: 我正在尝试将PHPMyAdmin容器连接到MySQL容器以查看数据库。 我已经通过启动了MySQL容器 和PHPMyAdmin-Container通过 尝试登录PHPMyAdmin时,我得到:mysqli_real_connect():php_network_getaddresses:getaddrinfo失败:名称无法解析 和 mysqli_real_connect():( HY00
我有一种字体在IE8和IE9以及所有其他浏览器中都能正常工作,但第二种字体只在IE9和其他浏览器中工作。在IE8中,我得到了一个错误: “CSS3111:@font-face遇到未知错误。” 我一直在四处看书,尝试了很多事情,但都没有运气。 我的代码是: 我试过用几个不同的生成器多次重新生成eot,玩过CSS,玩过头,玩过域,等等,但是看起来它们都很好。如前所述,相同的代码在相同的,只是指向不同的
我实现了spring Security3.2.5,但不幸的是@preauthorize不能用于类和方法。正如我从文档中读到的,@preauthorize应该允许方法和类工作,如果用户在注释中有指定的角色,但我能够运行所有方法或类,而没有任何角色差异。您可以看到security-config.xml和security.context.xml以及我在下面声明@preauthorize注释的类。如果你能
我试图获取系统中用户的名称,并且在PHP Laravel上使用以下代码: 当我运行代码时,我得到以下错误: 但如果我从上面的错误中得到SQL代码: 并且我在PhpMyAdmin上运行代码,它工作的代码,但向我显示以下警告消息: 我怎么能在拉拉维尔身上修好呢?
问题内容: 我正在尝试使形状的动画随着样本大小的增加(从100增加到1000)而呈指数分布。还有一个滑块,用于配置发行版的lambda参数,以及一个用于启动动画的按钮。 我的问题是,即使布局得到渲染,当我按下开始按钮时也没有动画发生。到目前为止,这是我的尝试: 为了简化起见,我在Python笔记本中运行它: 问题答案: 您应该注意函数的名称空间。 考虑 因此,您需要处理实际对象,而不是它们的某些本