【问题标题】:SOLRJ to connect with localhost solr using android applicationSOLRJ 使用 android 应用程序与 localhost solr 连接
【发布时间】:2014-05-06 23:26:47
【问题描述】:

我正在努力从我的 localhost Solr 从 Android 应用程序中检索一些数据。但我仍然有同样的错误。

05-06 18:22:09.036: E/AndroidRuntime(1628): java.lang.NoSuchMethodError: org.apache.http.conn.scheme.Scheme.<init>
05-06 18:22:09.036: E/AndroidRuntime(1628): at org.apache.http.impl.conn.SchemeRegistryFactory.createSystemDefault(SchemeRegistryFactory.java:83) 
05-06 18:22:09.036: E/AndroidRuntime(1628): at org.apache.http.impl.client.SystemDefaultHttpClient.createClientConnectionManager(SystemDefaultHttpClient.java:121) 
05-06 18:22:09.036: E/AndroidRuntime(1628): at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:221)

我正在使用这些罐子: - Commons-io-2.1.jar

  • httpclient-4.3.1.jar
  • httpcore-4.3.jar
  • jcl-over-slf4j-1.6.6.jar
  • 7 月到 slf4j-1.6.6.jar
  • log4j-1.2.16.jar
  • slf4j-api-1.6.6.jar
  • slf4j-log4j12-1.6.6.jar
  • solr-solrj-4.8.0jar

这是我写的代码: 包 com.example.secondapp;

import java.net.MalformedURLException; 

import org.apache.solr.client.solrj.SolrQuery; 
import org.apache.solr.client.solrj.SolrServer; 
import org.apache.solr.client.solrj.SolrServerException; 
import org.apache.solr.client.solrj.impl.HttpSolrServer; 
import org.apache.solr.client.solrj.response.QueryResponse; 
import org.apache.solr.common.SolrDocumentList; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

        Button btn1; 
        EditText etxt1; 

        public void RunIt() throws MalformedURLException, SolrServerException 
        { 
                String urlString = "http://localhost:8983/solr/collection1"; 

    SolrServer solr = new HttpSolrServer(urlString); 

    SolrQuery parameters = new SolrQuery(); 

    parameters.set("qt", "/select"); 
                parameters.set("q", "mem"); 

                QueryResponse response = solr.query(parameters); 
                SolrDocumentList list = response.getResults(); 


                   // for (int i = 0; i < list.size(); ++i) { 

                     // etxt1.setText((CharSequence) list.get(i)); 
                    //} 

        } 

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

        btn1=(Button)findViewById(R.id.button1); 
        etxt1=(EditText)findViewById(R.id.editText1); 


        btn1.setOnClickListener(new View.OnClickListener() { 

                        @Override 
                        public void onClick(View v) { 


                                etxt1.setText("a fin111"); 


                                try { 
                                        RunIt(); 
                                } catch (MalformedURLException e) { 
                                        // TODO Auto-generated catch block 
                                        e.printStackTrace(); 
                                } catch (SolrServerException e) { 
                                        // TODO Auto-generated catch block 
                                        e.printStackTrace(); 
                                } 


                        } 
                }); 
            } 
}

谁能告诉我错误 谢谢。

进一步调查表明 solrj 依赖于 android 工具中提供的旧 httpclient,并且不使用我引用的那个 httpclient-4.3.1.jar。

有什么办法可以解决这个问题。

【问题讨论】:

  • 如果 localhost 表示您拥有 solr 并尝试在模拟器中访问的 pc/desktop,您需要将 localhost 更改为 10.0.2.2
  • 你通过 HTTP GET 查询它。
  • @GaneshP 为什么需要从 localhost 更改为 10.0.2.2 ?
  • @Ajay Takur in Android emulator localhost 表示系统 - 表示模拟器 & 10.0.2.2 表示运行模拟器的系统

标签: java android solr jar solrj


【解决方案1】:

已解决,

我没有使用 SOLRJ ....

我只使用了简单的 http get 请求,它与后台线程的 asynctask 一起工作得很好(有一点延迟)。

这是代码。

package com.example.secondapp;
import com.example.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.DefaultClientConnection;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


 public class MainActivity extends Activity {

    Button btn1;
     EditText etxt1;
     TextView tvHttp;


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

        //btn1=(Button)findViewById(R.id.button1);
       // etxt1=(EditText)findViewById(R.id.editText1);
        tvHttp = (TextView) findViewById(R.id.textView1);


        HttpGetter Obj = new HttpGetter();
        Obj.execute("http://10.0.2.2:8983/solr/collection1/select?q=mem&wt=json&indent=true");


        //StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());


    }



    public  class HttpGetter  extends AsyncTask <String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        BufferedReader reader=null;
        String data =null;

         try {


             HttpClient client = new DefaultHttpClient();

             URI uri = new URI(params[0]);

             HttpGet Gett = new HttpGet(uri);

             HttpResponse response= client.execute(Gett);

             InputStream stream = response.getEntity().getContent();

             reader = new BufferedReader(new InputStreamReader(stream));

             StringBuffer buffer = new StringBuffer("");
             String line="";
             String newline=System.getProperty("line.separator");

             while ((line= reader.readLine())!=null)
             {
                 buffer.append(line + newline);
             }
             reader.close();

             data= buffer.toString();
             return data;

         }

         catch (URISyntaxException e)
         {
             e.printStackTrace();
         } 
         catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally
        {
            if (reader != null){
                try{
                    reader.close();
                }catch (Exception e){

                }
            }

        }



         return null;

}

   @Override
   protected void onPostExecute(String result)
   {
       super.onPostExecute(result);
       tvHttp.setText(result);
   }


}}

【讨论】:

    【解决方案2】:

    我相信你需要使用 SLF4J-Android jars。

    http://www.slf4j.org/android/

    我还必须像这里一样重写标准 SORLJ Util 和服务器类。

    https://gist.github.com/soltrinox/4b1b85509699c718b5d9

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      相关资源
      最近更新 更多