簡體   English   中英

ANDROID-使用HttpURLConnection通過json響應將數據發送到API

[英]ANDROID - Send data through json response into API using HttpURLConnection

我有一個像這樣的JSON:

{"AuditScheduleDetailID":12422,"AuditAnswerId":3,"LocalFindingID":9,"LocalMediaID":18,"Files":"adasdaf","ExtFiles":"jpg"}

然后,當我將“粘貼”復制到android項目中時,該json的變化如下:

"{\\"AuditScheduleDetailID\\":12422,\\"AuditAnswerId\\":3,\\"LocalFindingID\\":9," + "\\"LocalMediaID\\":18,\\"Files\\":\\"adasdaf\\",\\"ExtFiles\\":\\"jpg\\"}"

我發送數據的代碼是:

public class MainActivity extends AppCompatActivity {
    String send = "{\"AuditScheduleDetailID\":12422,\"AuditAnswerId\":3,\"LocalFindingID\":9," +
            "\"LocalMediaID\":18,\"Files\":\"adasdaf\",\"ExtFiles\":\"jpg\"}";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        uploadMedia(send);
        }
}
public void uploadMedia(String value){
        Log.d("uploading ", "test");
        Log.d("Test value : ", value);
        String urlString = "myURL"; // URL to call

        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setDoOutput(true);
            urlConnection.setChunkedStreamingMode(0);
            urlConnection.setRequestProperty("Content-Type","application/json;charset=UTF-8");
            urlConnection.setRequestProperty("Accept", "application/json");
            urlConnection.connect();

            OutputStream out = urlConnection.getOutputStream();
            BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));
            writer.write(URLEncoder.encode(value, "UTF-8"));
            writer.flush();
            writer.close();
            out.close();
            urlConnection.connect();
        } catch (Exception e) {
            Log.d("error upload", e.getMessage());
        }
    }

但我在logcat中收到如下錯誤:

FATAL EXCEPTION: main
Process: com.example.nawadata.sqllite, PID: 8750
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nawadata.sqllite/com.example.nawadata.sqllite.MainActivity}: java.lang.NullPointerException: println needs a message
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2193)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2243)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:139)
at com.example.nawadata.sqllite.MainActivity.uploadMedia(MainActivity.java:125)
at com.example.nawadata.sqllite.MainActivity.onCreate(MainActivity.java:51)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2243) 
at android.app.ActivityThread.access$800(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5019) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
at dalvik.system.NativeStart.main(Native Method) 

有人可以幫助我為什么我不斷收到錯誤java.lang.NullPointerException: println needs a message嗎? 以及如何解決?

當我使用郵遞員將數據發送到api時,返回消息是成功的,如下所示:

這個

嘗試執行此操作,因為值似乎為null。

Log.d(“正在上傳”,“測試”);

if(!value.equals(“”)||!value.eqauls(“”)))

{

Log.d(“ Test value:”,value);

}

如果此解決方案不起作用,請嘗試使用Log.e而不是Log.d,因為Log.e是出於使用錯誤的目的。

同時在catch中更改此行。

Log.e(“錯誤上傳”,e.getMessage());

用此行替換日志:

   Log.d("Test value : ", value+" ");

  Log.d ("error upload",e.getMessage()+" ");

使用Log.e印刷錯誤按照指導看到
替換那些行

 Log.d("Test value : ", ""+value);


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

注意:無論何時將JSON響應粘貼到字符串變量中,Android Studio都會自動進行android可讀的格式化。

更改您的活動代碼,如下所示:

String send = "{\"AuditScheduleDetailID\":12422,\"AuditAnswerId\":3,\"LocalFindingID\":9," +
            "\"LocalMediaID\":18,\"Files\":\"adasdaf\",\"ExtFiles\":\"jpg\"}";

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

        uploadMedia(send);
    }

    public void uploadMedia(String value) {
        Log.e("uploading ", "test");
        Log.e("Test value : ", value);
        String urlString = "myURL"; // URL to call

        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setDoOutput(true);
            urlConnection.setChunkedStreamingMode(0);
            urlConnection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            urlConnection.setRequestProperty("Accept", "application/json");
            urlConnection.connect();

            OutputStream out = urlConnection.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
            writer.write(URLEncoder.encode(value, "UTF-8"));
            writer.flush();
            writer.close();
            out.close();
            urlConnection.connect();
        } catch (Exception e) {
            Log.e("error upload", e.getMessage());
        }
    }

現在運行並檢查,如果有效,請告訴我。

您的logcat如下圖所示。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM