2013-07-25 82 views
-5

我在我的应用程序中遇到了一个致命异常:AsyncTask#2。有人可以告诉我为什么,并告诉我我需要做什么。我现在很困惑,需要一点帮助。机器人致命异常:AsyncTask#2

07-25 11:18:27.014: E/AndroidRuntime(784): FATAL EXCEPTION: AsyncTask #2 
07-25 11:18:27.014: E/AndroidRuntime(784): java.lang.RuntimeException: An error occured while executing doInBackground() 
07-25 11:18:27.014: E/AndroidRuntime(784): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
07-25 11:18:27.014: E/AndroidRuntime(784): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
07-25 11:18:27.014: E/AndroidRuntime(784): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
07-25 11:18:27.014: E/AndroidRuntime(784): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
07-25 11:18:27.014: E/AndroidRuntime(784): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
07-25 11:18:27.014: E/AndroidRuntime(784): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
07-25 11:18:27.014: E/AndroidRuntime(784): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
07-25 11:18:27.014: E/AndroidRuntime(784): at java.lang.Thread.run(Thread.java:856) 
07-25 11:18:27.014: E/AndroidRuntime(784): Caused by: java.lang.NullPointerException 
07-25 11:18:27.014: E/AndroidRuntime(784): at com.theproblemsolver.JSONParsser.getJSONFromURI(JSONParsser.java:35) 
07-25 11:18:27.014: E/AndroidRuntime(784): at com.theproblemsolver.asynctask.doInBackground(MainActivity.java:64) 
07-25 11:18:27.014: E/AndroidRuntime(784): at com.theproblemsolver.asynctask.doInBackground(MainActivity.java:1) 
07-25 11:18:27.014: E/AndroidRuntime(784): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
07-25 11:18:27.014: E/AndroidRuntime(784): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 

主类

public class MainActivity extends Activity { 

    EditText et; 
    Button getanswer; 

    JSONArray ResultsSet = null; {} 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     Button getanswer = (Button) findViewById(R.id.button1); 
     getanswer.setOnClickListener(new OnClickListener() { 


     public String uRI; 

     @Override 
     public void onClick(View v) { 
      new asynctask().execute(uRI); 
      Intent i = new Intent(MainActivity.this, ListView.class); 
      startActivity(i); 
     } 

     }); 
    } 
} 

     class asynctask extends AsyncTask<String, Void, JSONObject> { 

      private static final String TAG_RESULTS = "ResultsSet"; 
      private static final String TAG_SUBJECT = "Subject"; 
      private static final String TAG_NUMANSWERS = "NumAnswers"; 
      private static final String TAG_QUESTION = "Question"; 
      private static final String TAG_QUESTION_CONTENT = "Content"; 
      private static final String TAG_QUESTION_CHOSENANSWER = "ChosenAnswer"; 
      private static final String TAG_QUESTION_ANSWERS = "Answers"; 
      public JSONArray json; 

     @Override 
     protected JSONObject doInBackground(String... params) { 

      JSONParsser jParser = new JSONParsser(); 

      String uRI = params[0]; 

      JSONObject json = jParser.getJSONFromURI(uRI); 

      return json ; 

     }{ } 
      @Override 
      protected void onPostExecute(JSONObject json) { 

       JSONArray ResultsSet = null; { 
       try { 
        ResultsSet = json.getJSONArray(TAG_RESULTS); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
      } 

      return; 
     }}} 

JSONParsser类

public class JSONParsser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 
    EditText et; 

    public JSONParsser() { 
    } 

    public JSONObject getJSONFromURI(String uRI) { 

     try{ 
     HttpClient client = new DefaultHttpClient(); 
     try { 
      URI website = new URI("http://example=" + et.getText() + "json"); 
      HttpGet request = new HttpGet(); 
      request.setURI(website); 
      try { 
       HttpResponse response = client.execute(request); 
      HttpEntity httpEntity = response.getEntity(); 
      is = httpEntity.getContent(); 

      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } catch (URISyntaxException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     return jObj; 

     }finally{} 

    }{ 

    }} 

InstanceofJSONParsser类

public class JSONParserInstance { 

    JSONParsser jParser = new JSONParsser(); 

    public String uRI; 

    JSONObject json = jParser.getJSONFromURI(uRI); 


    private static final String TAG_RESULTS = "ResultsSet"; 
    private static final String TAG_SUBJECT = "Subject"; 
    private static final String TAG_NUMANSWERS = "NumAnswers"; 
    private static final String TAG_QUESTION = "Question"; 
    private static final String TAG_QUESTION_CONTENT = "Content"; 
    private static final String TAG_QUESTION_CHOSENANSWER = "ChosenAnswer"; 
    private static final String TAG_QUESTION_ANSWERS = "Answers"; 

      JSONArray ResultsSet = null; { 

    try { 
     ResultsSet = json.getJSONArray(TAG_RESULTS); 

     for(int i = 0; i < ResultsSet.length(); i++){ 
      JSONObject r = ResultsSet.getJSONObject(i); 

      String Subject = r.getString(TAG_SUBJECT); 
      String NmAnswers = r.getString(TAG_NUMANSWERS); 

      JSONObject Question = r.getJSONObject(TAG_QUESTION); 
      String Content = Question.getString(TAG_QUESTION_CONTENT); 
      String ChosenAnswer = Question.getString(TAG_QUESTION_CHOSENANSWER); 
      String Answers = Question.getString(TAG_QUESTION_ANSWERS); 

     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 

}}} 
+2

“哦,不,破例让我倾倒的代码完全甚至没有尝试把它缩小一点!“ –

+1

变量'et'为null? –

+0

同意@ShashankKadne,'et'平凡看起来为空。 – njzk2

回答

2
URI website = new URI("http://example=" + et.getText() + "json"); 

你没有连接你的EditText et和它的视图。所以et.getText会给你一个错误。

URI website = new URI("http://example=" + et.getText() + "json"); 

改变它URI website = uRI;

,并通过您的URI同时处理doInBackground

一样 - !

String uRI = "http://www.example.com/example.json"; 

      JSONObject json = jParser.getJSONFromURI(uRI); 
+0

好的,如果你正在按照我的回答你不再需要,我应该如何连接我的EditText和它的视图 – user2581961

+0

。因为我硬编码的uri字符串uRI =“http://www.example.com/example.json”; 如果你想从你的edittext中获得你的uri,获取文本并将其分配给字符串uRI –