Я получаю эту проблему в прошлом. Я использую PostgreSQL, и когда я запускаю свою программу, иногда она подключается, и иногда она выдает такую ошибку.
Когда я экспериментирую с моим кодом, я помещаю свой код подключения в первую строку ниже публичная форма. Вот пример:
ПЕРЕД:
public Form1()
{
//HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
//CODE
//CODE AGAIN
//ANOTHER CODE
//CODE NA NAMAN
//CODE PA RIN!
//Connect to Database to generate auto number
NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
iConnect.Open();
NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
NpgsqlDataReader iRead = iQuery.ExecuteReader();
NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);
DataSet iDataSet = new DataSet();
iAdapter.Fill(iDataSet, "ID");
MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());
}
СЕЙЧАС:
public Form1()
{
//Connect to Database to generate auto number
NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
iConnect.Open();
NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
NpgsqlDataReader iRead = iQuery.ExecuteReader();
NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);
DataSet iDataSet = new DataSet();
iAdapter.Fill(iDataSet, "ID");
MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());
//HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
//CODE
//CODE AGAIN
//ANOTHER CODE
//CODE NA NAMAN
//CODE PA RIN!
}
Я думаю, что программа должна сначала прочитать соединение, прежде чем что-либо делать, Я не знаю, исправьте меня, если я ошибаюсь. Но, согласно моим исследованиям, это не проблема кода - это было на самом деле от самой машины.
Happy Coding!
Вы не кодируете весь URL-адрес, а только его части, которые поступают из «ненадежных источников».
String query = URLEncoder.encode("apples oranges", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
В качестве альтернативы вы можете использовать Strings.urlEncode (String str) из DroidParts , который не выбрал проверенные исключения.
Или используйте что-то вроде
String uri = Uri.parse("http://...")
.buildUpon()
.appendQueryParameter("key", "val")
.build().toString();
Я собираюсь добавить одно предложение здесь. Вы можете сделать это, чтобы избежать необходимости получать какие-либо внешние библиотеки.
Попробуйте:
String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
Вы можете видеть, что в этом конкретном URL-адресе мне нужно закодировать эти пробелы, чтобы я мог использовать его для запроса.
Это использует пару функций, доступных вам в классах Android. Во-первых, класс URL-адреса может разбить URL-адрес на его соответствующие компоненты, поэтому вам не нужно выполнять какие-либо операции поиска / замены строк. Во-вторых, в этом подходе используется функция класса URI для надлежащего экранирования компонентов при построении URI через компоненты, а не из одной строки.
Красота этого подхода заключается в том, что вы можете использовать любую действительную строку url и пусть он работает без каких-либо специальных знаний об этом.
вы можете использовать ниже методы
public static String parseUrl(String surl) throws Exception
{
URL u = new URL(surl);
return new URI(u.getProtocol(), u.getAuthority(), u.getPath(), u.getQuery(), u.getRef()).toString();
}
или
public String parseURL(String url, Map<String, String> params)
{
Builder builder = Uri.parse(url).buildUpon();
for (String key : params.keySet())
{
builder.appendQueryParameter(key, params.get(key));
}
return builder.build().toString();
}
, второй лучше первого.
Также вы можете использовать этот
private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);
, это самый простой метод
try {
query = URLEncoder.encode(query, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Убедитесь, что используйте try ... catch. Если это не так.
Для android я бы использовал String android.net.Uri.encode (String s)
Кодирует символы в данной строке как «%» - экранированные октеты, используя схему UTF-8 , Листовые буквы («A-Z», «a-z»), номера («0-9») и незарезервированные символы («_- !. ~ '() *») нетронуты. Кодирует все остальные символы.
blockquote>Ex /
String urlEncoded = "http://stackoverflow.com/search?q=" + Uri.encode(query);
Uri.encode("a=1&b=1")
производит a%3D1%26b%3D1
, но ожидает a=1&b=1
– loentar
23 April 2015 в 12:06
a=1&b=1
в качестве запроса, вы хотите запросить именно это.
– Anubian Noob
21 August 2015 в 01:06
Uri.encode(query);
. – prasanthv 6 April 2014 в 17:13