2017-07-09 19 views
0

私は、ボレーアプリをテストしてJSONデータを取得しています。私のテストは、オンラインサイトからフェッチすることに成功しました。しかし、ローカルホストノードのjsサーバーに接続すると、フェッチされず、例外もコンソールで起動されませんでした。応答は全くありません。 JSONデータを処理して返しました。はい、私は "localhost"ではなく私のマシンの実際のアドレスをputしました。AndroidのVolleyアプリ(ローカルnodejsサーバ)

var express=require('express'); 

var mongoose=require('mongoose'); 

//making the connections 
mongoose.connect('mongodb://127.0.0.1:27017/db',function (error) { 
if(error){console.log("error");} 
else{ 

    console.log("connected!!"); 

} 

}); 




//using the exported function to create the server 
var app=express(); 
// Port to be listened tos 
var port=process.env.PORT || 3000; 

app.get('/api',function(req,res){ 

res.json({firstname:'George',lastname:'Cloney'}); 
}); 

app.listen(port); 

AppController.java:

public class AppController extends Application{ 

public static final String TAG = AppController.class 
     .getSimpleName(); 

private RequestQueue mRequestQueue; 
private ImageLoader mImageLoader; 

private static AppController mInstance; 

@Override 
public void onCreate() { 

    super.onCreate(); 

    mInstance = this; 
} 

public static synchronized AppController getInstance() { 
    return mInstance; 
} 

public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     mRequestQueue = Volley.newRequestQueue(getApplicationContext()); 
    } 

    return mRequestQueue; 
} 

public ImageLoader getImageLoader() { 
    getRequestQueue(); 
    if (mImageLoader == null) { 
     mImageLoader = new ImageLoader(this.mRequestQueue, 
       new LruBitmapCache()); 
    } 
    return this.mImageLoader; 
} 

public <T> void addToRequestQueue(Request<T> req, String tag) { 
    // set the default tag if tag is empty 
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); 
    getRequestQueue().add(req); 
} 

public <T> void addToRequestQueue(Request<T> req) { 
    req.setTag(TAG); 
    getRequestQueue().add(req); 
} 

public void cancelPendingRequests(Object tag) { 
    if (mRequestQueue != null) { 
     mRequestQueue.cancelAll(tag); 
    } 
} 
} 

MainActivity.java:私は、オブジェクトがそのJSON配列を応答と呼ばれることがわかった長い分析の後

public class MainActivity extends AppCompatActivity { 

TextView text; 
private String url = "http://192.168.43.214:3000/api"; 

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

    text=(TextView)findViewById(R.id.text); 

    JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      //trying to test the response length but no results also 
      text.setText(" "+response.length()); 
      for (int i = 0; i < response.length(); i++) { 

       try { 
        JSONObject jsonObject = response.getJSONObject(i); 

        String fullname=jsonObject.getString("firstname"); 

        text.setText(jsonObject.toString()); 

           Toast.makeText(getApplicationContext(),fullname,Toast.LENGTH_LONG).show(); 

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


      } 



      //Log.v("Data from the web: " , response.toString()); 


     } 
    }, new Response.ErrorListener(){ 
     @Override 
     public void onErrorResponse(VolleyError error) { 

      VolleyLog.d("Mainactivity", error.getMessage()); 

     } 
    }); 

    AppController.getInstance().addToRequestQueue(request); 

} 





    } 

答えて

0

私Nodejsサーバコードザッツ 解決策は、jsonオブジェクトではなくjson配列で応答するだけで、ノードjsコードでjson配列を返すことです。

res.json([{,}]; 

代わりにこの

res.json({,}); 

プラス方法内側JSON配列及びその機能を、応答オブジェクトを入れ、それを呼び出すのonCreate:

 void getJsonArray(url){ 
     //like before 
     } 
関連する問題