2013-12-18 42 views
0

請看看下面的代碼HtttpResponseException:通過JSON傳遞輸入數據到服務器

package com.example.jsontest; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.Header; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.StatusLine; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private EditText editText; 

/** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    StrictMode.ThreadPolicy policy = new StrictMode. 
    ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 

    setContentView(R.layout.activity_main); 

    editText = (EditText)findViewById(R.id.edit_text); 

    //Call The JSon 
    try { 
     //Get the JSON 
     //JSONObject jObject = new JSONObject(getJson()); 

     //editText.append(jObject.toString()); 

    // confidence 
     //Put the JSON 
     JSONObject getJsonObject = new JSONObject(putJson()); 
     //editText.append(getJsonObject.getString("created")); 


    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    } 



    private String putJson() 
    { 
     DefaultHttpClient client = new DefaultHttpClient(); 

     StringBuffer sb = null; 
     try { 
      String postURL = "https://bigml.io/andromeda/prediction?username=XXXXXXXX;api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 

      HttpPost req = new HttpPost(postURL); 
      req.setHeader("Content-Type", "application/json"); 


      JSONObject requestObject = new JSONObject(); 
      requestObject.put("model", "model/xxxxxxxxxxx"); 
      requestObject.put("input_data", "000008:5"); 

      StringEntity reqEntity = new StringEntity(requestObject.toString()); 
      req.setEntity(reqEntity); 

      HttpResponse res = client.execute(req); 
      HttpEntity entity = res.getEntity(); 
      String responseString = new BasicResponseHandler().handleResponse(res); 
      if (entity != null) { 
       //EntityUtils.consume(entity); 
      } 

      sb = new StringBuffer(""); 


      sb.append(responseString); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
      sb = new StringBuffer(ex.toString()); 
     } 

     return sb.toString(); 

    } 
} 

首先,這是一個測試代碼,這就是爲什麼網絡安全已被重寫。

我試圖將數據發送到BigML.com得到的預測。根據理論值的預測文件,數據應該像這樣被傳遞(參見下圖),這是頁面 - https://bigml.com/developers/predictions

enter image description here

現在,每當我跑我的代碼,我得到以下錯誤

12-18 10:09:09.880: W/System.err(1331): org.apache.http.client.HttpResponseException: NOT FOUND 
12-18 10:09:09.880: W/System.err(1331):  at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71) 
12-18 10:09:09.889: W/System.err(1331):  at com.example.jsontest.MainActivity.putJson(MainActivity.java:124) 
12-18 10:09:09.889: W/System.err(1331):  at com.example.jsontest.MainActivity.onCreate(MainActivity.java:58) 
12-18 10:09:09.889: W/System.err(1331):  at android.app.Activity.performCreate(Activity.java:5104) 
12-18 10:09:09.900: W/System.err(1331):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
12-18 10:09:09.900: W/System.err(1331):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
12-18 10:09:09.910: W/System.err(1331):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
12-18 10:09:09.910: W/System.err(1331):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
12-18 10:09:09.920: W/System.err(1331):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
12-18 10:09:09.920: W/System.err(1331):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-18 10:09:09.920: W/System.err(1331):  at android.os.Looper.loop(Looper.java:137) 
12-18 10:09:09.943: W/System.err(1331):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
12-18 10:09:09.943: W/System.err(1331):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-18 10:09:09.950: W/System.err(1331):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-18 10:09:09.950: W/System.err(1331):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-18 10:09:09.950: W/System.err(1331):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-18 10:09:09.960: W/System.err(1331):  at dalvik.system.NativeStart.main(Native Method) 
12-18 10:09:09.980: W/System.err(1331): org.json.JSONException: Value org.apache.http.client.HttpResponseException of type java.lang.String cannot be converted to JSONObject 
12-18 10:09:09.980: W/System.err(1331):  at org.json.JSON.typeMismatch(JSON.java:111) 
12-18 10:09:10.000: W/System.err(1331):  at org.json.JSONObject.<init>(JSONObject.java:158) 
12-18 10:09:10.030: W/System.err(1331):  at org.json.JSONObject.<init>(JSONObject.java:171) 
12-18 10:09:10.030: W/System.err(1331):  at com.example.jsontest.MainActivity.onCreate(MainActivity.java:58) 
12-18 10:09:10.030: W/System.err(1331):  at android.app.Activity.performCreate(Activity.java:5104) 
12-18 10:09:10.040: W/System.err(1331):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
12-18 10:09:10.050: W/System.err(1331):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
12-18 10:09:10.050: W/System.err(1331):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
12-18 10:09:10.093: W/System.err(1331):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
12-18 10:09:10.093: W/System.err(1331):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
12-18 10:09:10.100: W/System.err(1331):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-18 10:09:10.110: W/System.err(1331):  at android.os.Looper.loop(Looper.java:137) 
12-18 10:09:10.120: W/System.err(1331):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
12-18 10:09:10.120: W/System.err(1331):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-18 10:09:10.153: W/System.err(1331):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-18 10:09:10.160: W/System.err(1331):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-18 10:09:10.160: W/System.err(1331):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-18 10:09:10.171: W/System.err(1331):  at dalvik.system.NativeStart.main(Native Method) 

我知道驗證數據是正確的,因爲如果我只是將url https://bigml.io/andromeda/prediction?username=xxx;api_key=xxxxxxxxxxxxxx"粘貼到瀏覽器,那麼我會得到預測數據的輸出,它是在沒有任何輸入數據的情況下創建的。

我在這裏做什麼錯了?

+0

你可以把你的onCreate方法嗎?這似乎出錯了 –

+0

@託恩伯格:現在看看 –

回答

0

看來你的要求越來越的exceception。

這一段代碼:

} catch (Exception ex) { 
     ex.printStackTrace(); 
     sb = new StringBuffer(ex.toString()); 
    } 

    return sb.toString(); 

讓你的方法返回異常的名字。如果YOUT把日誌語句在你發現你可以看到究竟是怎麼了?:

} catch (Exception ex) { 
     Log.e("MY_TAG", "Something went wrong here", ex); 
     ex.printStackTrace(); 
     sb = new StringBuffer(ex.toString()); 
    } 

    return sb.toString(); 

您可以檢查logcat的,看看到底發生了什麼錯誤。

+0

沒有必要。這也給我已經發布的例外。 –

+0

您需要完整的HttpResponseException堆棧跟蹤來完全理解這裏的問題,我認爲 –

-1
org.json.JSONException: Value org.apache.http.client.HttpResponseException of type java.lang.String cannot be converted to JSONObject 

這只是意味着響應,你越來越不能轉換成JSON,請檢查您是否正在返回的字符串是一個有效的JSON字符串。

-1

你在MainThread做網絡IO?這是不允許的。

相關問題