gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:01:09 26 4
gpt4 key购买 nike

我正在努力从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com