java - SOLRJ 使用 android 应用程序连接本地主机 solr

标签 java android solr jar solrj

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

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)

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

  • httpclient-4.3.1.jar
  • httpcore-4.3.jar
  • jcl-over-slf4j-1.6.6.jar
  • jul-to-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。

如何解决这个问题。

最佳答案

已解决,

我没有使用 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);
   }


}}

关于java - SOLRJ 使用 android 应用程序连接本地主机 solr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23506204/

相关文章:

java - 使用 JAXB 编译多个包含相同元素的重复定义的 XSD

java - 如何在 X 类工厂中声明方法,以便其子工厂可以使用子类 Class-1 常量?

android - 如何从 firebase db android 中的 2 个表中检索数据?

java - 在 onCreate 外部声明变量 - Android

mongodb - 用于 MongoDB 的 solr 数据导入处理程序

java - 如何在 log4j2 属性中设置类的日志级别

java - 使用 Java 中的 DocumentBuilder/Document 在 XML 文件中查找 "untagged"内容

php - Android - 异步任务完成后的下一个 Activity

java - 索引 : how to write document id to log? 期间的 SOLR RuntimeException

java - Solr SimplePostTool : IOException while reading response: java.net.SocketException:来自服务器的意外文件结尾