2013-12-15 35 views
0

我注意到这个问题已被问及之前,我已经尝试了几个建议,但没有成功。这可能是一个错字或范围问题,但我找不到问题。报价正在发送,并且只有意图呼叫不起作用,也可以看到吐司。OnPostExecute中的MyIntent未被调用并崩溃我的应用程序?

部分我QuoteFormActivity.java的

private class AsyncHttpPost extends AsyncTask<String, Void, String> 
    {  

     /* 
     Context context; 
     private AsyncHttpPost(Context context) { 
      this.context = context.getApplicationContext(); 
     } 
     */ 
     @Override 
     protected String doInBackground(String... params) 
     {   
      BufferedReader inBuffer = null; 
      String url = "http://www.mydomain.com/submitted_quotes.php"; 
      String result = "fail"; 
      try { 
       HttpClient httpClient = new DefaultHttpClient(); 
       HttpPost request = new HttpPost(url); 
       List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
       postParameters.add(new BasicNameValuePair("text_quote", params[0])); 
       postParameters.add(new BasicNameValuePair("text_user", params[1])); 

       UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
         postParameters); 

       request.setEntity(formEntity); 
      httpClient.execute(request); 
      result="got it"; 

      } catch(Exception e) { 
       // Do something about exceptions 
       result = e.getMessage(); 
      } finally { 
       if (inBuffer != null) { 
        try { 
         inBuffer.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
      return result; 
     } 

     protected void onPostExecute(String result) 
     {  
      Toast toast = Toast.makeText(QuoteFormActivity.this, result, Toast.LENGTH_LONG); 
      toast.show(); 
      //Log.d("test_app","httppost thingy from private class: "+result); 
      Intent myIntent = new Intent(QuoteFormActivity.this, DisplayQuoteActivity.class); 
      //view.getContext().startActivity(myIntent); 
      startActivity(myIntent); 
      super.onPostExecute(result); 
      //startActivity(new Intent(context, DisplayQuoteActivity.class)); 

     } 
    } 

[编辑(太长的评论)这是在明显

<activity 
     android:name="com.mydomain.quotes.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.mydomain.quotes.DisplayQuoteActivity" 
     android:label="@string/title_activity_display_quote" > 
    </activity> 
    <activity 
     android:name="com.mydomain.quotes.QuoteFormActivity" 
     android:label="@string/title_activity_quote_form" 
     > 

    </activity> 

编辑堆栈跟踪活动?

12-17 17:23:55.101: D/test_app(1554): Show Send Quote Page 
12-17 17:23:55.981: I/Choreographer(1554): Skipped 75 frames! The application may be doing too much work on its main thread. 
12-17 17:24:16.091: I/Choreographer(1554): Skipped 32 frames! The application may be doing too much work on its main thread. 
12-17 17:24:23.491: D/test_app(1554): Send quote form: test Afz: stack 
12-17 17:24:23.902: D/dalvikvm(1554): GC_CONCURRENT freed 184K, 10% free 3059K/3364K, paused 73ms+113ms, total 277ms 
12-17 17:24:24.542: D/test_app(1554): httppost thingy from private class: got it 
12-17 17:24:24.981: D/AndroidRuntime(1554): Shutting down VM 
12-17 17:24:25.021: W/dalvikvm(1554): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
12-17 17:24:25.081: E/AndroidRuntime(1554): FATAL EXCEPTION: main 
12-17 17:24:25.081: E/AndroidRuntime(1554): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain.quotes/com.mydomain.quotes.DisplayQuoteActivity}: java.lang.NullPointerException 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.os.Looper.loop(Looper.java:137) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at dalvik.system.NativeStart.main(Native Method) 
12-17 17:24:25.081: E/AndroidRuntime(1554): Caused by: java.lang.NullPointerException 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at com.mydomain.quotes.DisplayQuoteActivity.onCreate(DisplayQuoteActivity.java:30) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.Activity.performCreate(Activity.java:5104) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
12-17 17:24:25.081: E/AndroidRuntime(1554):  ... 11 more 

BTW:在应用程序设计,这是有一个“感谢您提交”,只需将用户重定向到所选活动的好方式。

+3

是你的asynctask内在的一类活动。张贴堆栈跟踪 – Raghunandan

+2

与Raghunandan同意,堆栈跟踪会很好。没有更多信息的我最好的猜测是DisplayQuoteActivity未在您的清单中注册。 –

+0

我将asynctask定义为QuoteFormActivity的内部类,它基本上只是一个表单。仅供参考:DisplayQouteActivity已在清单中注册。 – alex

回答

1

有更详细的了解您的异常,你会发现这一点:

DisplayQuoteActivity.onCreate(DisplayQuoteActivity.java:30) NullPointerException 

就在第30行检查DisplayQuoteActivity,你会发现这个问题,为什么Android是不创建您的新活动。 startActivity代码工作正常!

+0

你会得到+50!作为一个新手,我甚至不知道如何正确阅读日志文件,并感谢你我已经解决了我的问题。原来我从DisplayQuoteActivity中的另一个活动中设置了一个变量集。为了进一步学习,你是如何选择特定行的? “阅读日志文件”的任何教程建议 – alex

+1

是的,使用Android Studio,您可以从那里读取logcat,而不是使用终端(Mac OS)或命令提示符。它为您提供了一个只需编写“Exception”的搜索字段,您将过滤整个logcat,并轻松读取最后一个异常。另一件事是,在某些情况下,你会发现你的异常“隐藏”在堆栈轨迹内。例如,如果您只是查看您的异常,首先它表示Android无法启动新的活动,但如果您继续阅读,则会发现在大多数情况下它是真正的异常的“引起”。 – noni

1

问题似乎是您尝试启动活动的方式。试着改变你的onPostExecute这样:

protected void onPostExecute(String result) 
    {  
     Toast toast = Toast.makeText(QuoteFormActivity.this, result, Toast.LENGTH_LONG); 
     toast.show(); 

     QuoteFormActivity.this.startActivity(new Intent(QuoteFormActivity.this, BuiltInCamera.class)); 
     super.onPostExecute(result); 

    } 
+0

不幸你的建议没有奏效。 – alex