我无法做任何事情。一旦输入完成,它就会崩溃。
注释掉的部分是之前显示信息的方式,但我只想显示UPC和产品。有什么想法吗?
如果有问题已经存在,请将其链接。
崩溃日志:
04-08 21:12:52.416: W/dalvikvm(26817): threadid=12: thread exiting with uncaught exception (group=0x40ac4228)
04-08 21:12:52.426: E/AndroidRuntime(26817): FATAL EXCEPTION: Thread-48634
04-08 21:12:52.426: E/AndroidRuntime(26817): java.lang.NullPointerException
04-08 21:12:52.426: E/AndroidRuntime(26817): at net.example.glutefree.Networking.getServerData(Networking.java:113)
04-08 21:12:52.426: E/AndroidRuntime(26817): at net.example.glutefree.Networking.access$0(Networking.java:68)
04-08 21:12:52.426: E/AndroidRuntime(26817): at net.example.glutefree.Networking$1.run(Networking.java:49)
04-08 21:12:52.727: E/log_tag(26817): Result [{"ID":"512320","UPCA":"310742023497","Company":"310742","Product":"OXY MAX DEEP PORE PADS","Gluten Free":null}]
04-08 21:12:52.727: W/dalvikvm(26817): threadid=13: thread exiting with uncaught exception (group=0x40ac4228)
04-08 21:12:52.737: E/AndroidRuntime_2_crash(26817): crash in the same process: Thread-48635
04-08 21:12:52.737: E/AndroidRuntime_2_crash(26817): java.lang.NullPointerException
04-08 21:12:52.737: E/AndroidRuntime_2_crash(26817): at net.example.glutefree.Networking.getServerData(Networking.java:113)
04-08 21:12:52.737: E/AndroidRuntime_2_crash(26817): at net.example.glutefree.Networking.access$0(Networking.java:68)
04-08 21:12:52.737: E/AndroidRuntime_2_crash(26817): at net.example.glutefree.Networking$1.run(Networking.java:49)
package net.example.glutefree;
import android.app.Activity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Networking extends Activity{
TextView txt;
int request_Code = 1;
//called when activity is first created
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_networking);
txt = new TextView(getApplicationContext());
// Set the text and call the connect function.
txt.setText("Connecting...");
//call the method to run the data retreival
new Thread() {
public void run() {
final String data = getServerData(KEY_121);
if (data != null)
runOnUiThread(new Runnable()
{
public void run()
{
txt.setText(data);
}
});
}
}.start();
}
public static final String KEY_121 = "http://glutefree.com/application_query.php";
private String getServerData(String returnString) {
String UPC = getIntent().getStringExtra("UPCA");
InputStream is = null;
String result = "";
//the upc data to send
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("UPCA",UPC));
//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);
Log.e("log_tag", "Result "+result.toString());
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
String UPCA = json_data.getString("UPCA");
String Product = json_data.getString("Product");
TextView upca = (TextView)findViewById(R.id.textView1);
upca.setText("UPCA: " + UPCA);
TextView product = (TextView)findViewById(R.id.textView2);
product.setText("Product: " + Product);
/* Log.i("log_tag","UPCA: "+json_data.getString("UPCA")+
", Product: "+json_data.getString("Product"));*/
//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;
}
}
XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Networking" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="37dp"
android:layout_marginTop="38dp"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="63dp"
android:text="TextView" />
</RelativeLayout>
新错误:
04-08 22:27:38.545: E/log_tag(3312): Result [{"ID":"512320","UPCA":"310742023497","Company":"310742","Product":"OXY MAX DEEP PORE PADS","Gluten Free":null}]
04-08 22:27:38.545: W/dalvikvm(3312): threadid=12: thread exiting with uncaught exception (group=0x40aa6228)
04-08 22:27:38.565: E/AndroidRuntime(3312): FATAL EXCEPTION: Thread-475
04-08 22:27:38.565: E/AndroidRuntime(3312): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4381)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:805)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.view.View.requestLayout(View.java:12887)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.view.View.requestLayout(View.java:12887)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.view.View.requestLayout(View.java:12887)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.view.View.requestLayout(View.java:12887)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:268)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.view.View.requestLayout(View.java:12887)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.widget.TextView.checkForRelayout(TextView.java:7207)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.widget.TextView.setText(TextView.java:3474)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.widget.TextView.setText(TextView.java:3324)
04-08 22:27:38.565: E/AndroidRuntime(3312): at android.widget.TextView.setText(TextView.java:3299)
04-08 22:27:38.565: E/AndroidRuntime(3312): at net.example.glutefree.Networking.getServerData(Networking.java:108)
04-08 22:27:38.565: E/AndroidRuntime(3312): at net.example.glutefree.Networking.access$0(Networking.java:63)
04-08 22:27:38.565: E/AndroidRuntime(3312): at net.example.glutefree.Networking$1.run(Networking.java:44)
答案 0 :(得分:2)
好的,所以从你的日志中我可以看到你在第113行有一个NullPointerException:
TextView upca = (TextView)findViewById(R.id.textView1); //line 112
upca.setText("UPCA: " + UPCA); //line 113
这意味着您的upca
TextView
未在第112行初始化。您能否检查一下您在上面设置的布局中是否有textView1
?
更新:您收到的第二个错误ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
当您尝试从另一个UI Thread
更新Thread
时会发生这种情况。您在代码中执行的操作是从新getServerData()
调用Thread
,而在该方法中,您尝试更改TextViews
中UI Thread
的文本
希望以上有意义吗?