2013-08-21 21 views
5

残りのサーバーにjsonの文字列を投稿しようとしていますが、入力ストリームにjavaファイルが見つかりませんでした。ここでAndroid Http url connection getInputstreamで例外が発生しました。

は私のコードです:次のように私は取得しています

package com.muzima.view.sample.activities; 

import javax.servlet.http.HttpServletResponse; 

import com.muzima.view.sample.R; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Base64; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class SyncFormDataActivity extends Activity implements OnClickListener{ 

     private EditText value; 

     private Button btn; 

     private static final String METHOD_POST = "POST"; 

     private static final String URL = "/ws/rest/v1/muzima/queueData"; 



    @Override 
     public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_sync_form_data); 

       String formsubmissionJson = getIntent().getStringExtra("formdata"); 
      String URF = (getString(R.string.default_server) + URL); 

      System.out.println("url is" +URF); 

       /* Testing to see if we can get the json string from form in webview*/ 

       System.out.println("submit 56565 ======= " + formsubmissionJson); 

       btn=(Button)findViewById(R.id.button1); 

       btn.setOnClickListener(this); 

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
       getMenuInflater().inflate(R.layout.menu, menu); 
       return true; 

     } 

     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 

     } 

     @Override 
     protected void onResume() { 
      super.onResume(); 

     } 

     @Override 
     protected void onPause() { 
      super.onPause(); 
      } 

     public void onClick(View v) { 
     // TODO Auto-generated method stub 
       String formsubmissionJson = getIntent().getStringExtra("formdata"); 
       new MyAsyncTask().execute(formsubmissionJson.toString());  

     } 

     private class MyAsyncTask extends AsyncTask<String, String, String>{ 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

     } 

     @Override 
     protected String doInBackground(String... args) { 
       try { 
           postingQueueData(); 
         } catch (Exception e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 

         } 
       // TODO Auto-generated method stub 
         return null; 
     } 

     protected void onPostExecute(Double result){ 

     Toast.makeText(getApplicationContext(), "Form Data has been sent to server", Toast.LENGTH_LONG).show(); 

       // Start ListPatient activity 
    Intent ip = new Intent(getApplicationContext(), ListPatientActivity.class); 
     startActivity(ip); 

     } 


     public void postingQueueData() throws Exception { 
        String formsubmissionJson = getIntent().getStringExtra("formdata"); 
        URL url = new URL("http://192.168.1.3:8081/openmrs-standalone/ws/rest/v1/muzima/queueData"); 

         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
        String encodedAuthorization = "Basic " + Base64.encodeToString("admin:test".getBytes(), Base64.NO_WRAP); 
        // String encodedAuthorization = "Basic " + Base64.encodeToString("admin:test".getBytes(), Base64.NO_WRAP); 
        connection.setRequestProperty("Authorization", encodedAuthorization); 
        connection.setRequestMethod(METHOD_POST); 
        connection.setRequestProperty("Content-Type", "application/json"); 
        connection.setDoOutput(true); 

        OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 
        writer.write(formsubmissionJson); 
        writer.flush(); 

        InputStreamReader reader = new InputStreamReader(connection.getInputStream(),"UTF-8"); 
        int responseCode = reader.read(); 
        if (responseCode == HttpServletResponse.SC_OK 
          || responseCode == HttpServletResponse.SC_CREATED) { 
         //log.info("Queue data created!"); 
        } 

        reader.close(); 
        writer.close(); 
        } 


        } 



     } 

システムエラーは次のとおりです。

08-21 10:49:26.389: W/System.err(8640): java.io.FileNotFoundException: http://192.168.1.3:8081/openmrs-standalone/ws/rest/v1/muzima/queueData 
08-21 10:49:26.399: W/System.err(8640):   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:521) 
08-21 10:49:26.399: W/System.err(8640):   at com.muzima.view.sample.activities.SyncFormDataActivity$MyAsyncTask.postingQueueData(SyncFormDataActivity.java:135) 
08-21 10:49:26.399: W/System.err(8640):   at com.muzima.view.sample.activities.SyncFormDataActivity$MyAsyncTask.doInBackground(SyncFormDataActivity.java:98) 
08-21 10:49:26.399: W/System.err(8640):   at com.muzima.view.sample.activities.SyncFormDataActivity$MyAsyncTask.doInBackground(SyncFormDataActivity.java:1) 
08-21 10:49:26.399: W/System.err(8640):   at android.os.AsyncTask$2.call(AsyncTask.java:185) 
08-21 10:49:26.399: W/System.err(8640):   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
08-21 10:49:26.399: W/System.err(8640):   at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
08-21 10:49:26.399: W/System.err(8640):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
08-21 10:49:26.409: W/System.err(8640):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
08-21 10:49:26.409: W/System.err(8640):   at java.lang.Thread.run(Thread.java:1019) 

これが発生する可能性がありますし、どのように私はそれを解決するのですか?

+0

コードは – user2499766

+0

です関連コードが必要 –

+0

そのコードはどこですか? : – Antoniossss

答えて

2

FileNotFound URL接続では、指定されたURLが提供されていないか、サーバーが4 *コードを返します。チェック対象のリソースが利用可能な場合

+0

私はjsonの文字列を残りのURLに送ります。高度な残りのクロムプラグインを使用して私は同じjsonの文字列を送信することができます – user2499766

+0

コード> http://pastebin.com/pdkaxxuQ – user2499766

+0

ログの猫のエラーhttp://pastebin.com/wv8v8nzN – user2499766

1

この設定してみてください:あなたの接続にconnection.setDoOutput(false);を - それが役に立てば幸い;)

8

を4の場合にはエラーHTTPコードが

connection.getErrorStream(); 

代わりの

使用**
connection.getInputStream(); 

接続はHttpURLConnectionの種類です。

0

ストリームにデータを書き込む前に、 "connection.connect()"行を追加します。

connection.connect(); 

OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 
        writer.write(formsubmissionJson);     
writer.flush(); 
0

理由はわかりませんが、次のコード行を追加しても問題は解決しました。

connection.setInstanceFollowRedirects(false); 
0

あなたはサーバー側でGET方法を使用した場合、それは、このエラーが発生します。 connection.setRequestMethod("GET");

変更connection.setRequestMethod("POST");と、この次のコードを削除:

それが動作するようにします。

connection.setDoOutput(true);  
      OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 
        writer.write(formsubmissionJson); 
        writer.flush(); 

それとも、単に上記の変更を行うことなく、サーバー上のPOSTからGET方法を変更します。

関連する問題