【问题标题】:Getting 'filenotfound' exception on an Instagram hashtag search query在 Instagram 主题标签搜索查询中获取“filenotfound”异常
【发布时间】:2015-09-09 18:01:23
【问题描述】:

我正在尝试运行一个程序来搜索 Instagram 以查找特定主题标签的图片。下面是我的程序代码。当我运行程序时,它没有显示任何错误,但它从 Instagram 返回“filenotfoundexception”。我认为它在端点 URL 中,但我无法完全弄清楚我在哪里犯了错误。怎么做 我想通了?

public class SearchActivity extends Activity {

    public EditText edtSearch;
    private final String INSTA_CONS_ID = "xxxx";
    private final String INSTA_CONS_SEC_KEY = "xxxx";
    public static final String APIURL = "https://api.instagram.com/v1/tags";
    ListView list;
    public int index;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        Button btnInsta =(Button)findViewById(R.id.btnInsta);
        edtSearch =(EditText)findViewById(R.id.edtSearch);
        list = (ListView)findViewById(R.id.list);

        btnInsta.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                new SearchOnInstagram().execute(edtSearch.getText().toString());
            }
        });
    }

    class SearchOnInstagram extends AsyncTask<String, Void, Integer> {
        final List<Instagram> inst = new ArrayList<Instagram>();
        final int SUCCESS = 0;
        final int FAILURE = SUCCESS + 1;
        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = ProgressDialog.show(SearchActivity.this, "", getString(R.string.searchinginsta));
        }

        @Override
        protected Integer doInBackground(String... params) {
            try {

                Query query = new Query(params[0]);
                String urlString = APIURL + "/"+ query +"/media/recent?client_id=" + INSTA_CONS_ID;
                        URL url = new URL(urlString);

                InputStream inputStream = url.openConnection().getInputStream();
                String response = streamToString(inputStream);
                JSONObject jsonObject = (JSONObject) new JSONTokener(response).nextValue();
                JSONArray jsonArray = jsonObject.getJSONArray("data");

                for (int i =0; i<= jsonArray.length(); i++) {
                    JSONObject mainImageJsonObject = jsonArray.getJSONObject(index).getJSONObject("images").getJSONObject("standard_resolution");
                    String imageUrlString = mainImageJsonObject.getString("url");
                    String userName = "@Arnab";

                    Instagram instItem = new Instagram(userName,imageUrlString);
                    inst.add(instItem);
                }
                return SUCCESS;
            }
            catch (Exception e) {
                e.printStackTrace();
            }

            return FAILURE;
        }

        @Override
        protected void onPostExecute(Integer result)
        {
            super.onPostExecute(result);
            dialog.dismiss();
            if (result == SUCCESS) {
                list.setAdapter(new InstagramAdapter(SearchActivity.this, inst));
            }
            else
            {
                Toast.makeText(SearchActivity.this, getString(R.string.error), Toast.LENGTH_LONG).show();
            }
        }

        public static String streamToString(InputStream p_is)
        {
            try
            {
                BufferedReader m_br;
                StringBuffer m_outString = new StringBuffer();
                m_br = new BufferedReader(new InputStreamReader(p_is));
                String m_read = m_br.readLine();
                while(m_read != null)
                {
                    m_outString.append(m_read);
                    m_read =m_br.readLine();
                }
                return m_outString.toString();
            }
            catch (Exception p_ex)
            {
                p_ex.printStackTrace();
                return "";
            }
        }

我收到以下异常

09-09 16:20:10.070  25571-25625/com.example.smarthelp W/System.err?       java.io.FileNotFoundException:  https://api.instagram.com/v1/tags/Query{query='india', lang='null', locale='null', maxId=-1, count=-1, since='null', sinceId=-1, geocode='null', until='null', resultType='null', nextPageQuery='null'}/media/recent?client_id=xxx
09-09 16:20:10.070  25571-25625/com.example.smarthelp W/System.err? at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:197)
09-09 16:20:10.070  25571-25625/com.example.smarthelp W/System.err? at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
09-09 16:20:10.070  25571-25625/com.example.smarthelp W/System.err? at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
09-09 16:20:10.070  25571-25625/com.example.smarthelp W/System.err? at com.example.smarthelp.SearchActivity$SearchOnInstagram.doInBackground(SearchActivity.java:156)

【问题讨论】:

  • 你能发布你的异常细节,堆栈跟踪吗?它发生在哪一行?
  • @Shiva 请查看上面发布的堆栈跟踪
  • 您没有正确创建 URL。根据堆栈跟踪,您的请求 URL 应该只包含 india 而不是 Query{query='india', lang='null', locale='null', maxId=-1, count=-1, since='null', sinceId=-1, geocode='null', until='null', resultType='null', nextPageQuery='null'}
  • @DMunoz 你能告诉我如何正确地做到这一点吗?问题到底出在哪里?

标签: java android instagram-api


【解决方案1】:

Query 类/对象是什么?

您的网址格式错误。

    Query query = new Query(params[0]);
    String urlString = APIURL + "/"+ query +"/media/recent?client_id=" + INSTA_CONS_ID;
            URL url = new URL(urlString);

应该是

    String urlString = APIURL + "/"+ params[0] +"/media/recent?client_id=" + INSTA_CONS_ID;
            URL url = new URL(urlString);

但使用Query 对象一定是有原因的。所以上面不是最优雅的方式,但它应该可以工作。

【讨论】:

  • 现在工作正常。实际上我使用 Twitter 搜索和 Twitter4j 并从那里我混合了两个代码。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多